package edzest.swing;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.LayoutStyle.ComponentPlacement;

import edzest.dao.ZipcodeDAO;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;

public class ZipcodeSub extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTextField dong;
	private JTextField etcAddrA;
	private JComboBox baseAddr = new JComboBox();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			ZipcodeSub dialog = new ZipcodeSub(null, null, null, null);
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	// public ZipcodeSub() {
	public ZipcodeSub( final JTextField zip1, final JTextField zip2, final JTextField addr, final JTextField etcAddr ) {
		setBounds(100, 100, 450, 300);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		JLabel txtDong = new JLabel("동 이름");
		txtDong.setFont(new Font("굴림", Font.BOLD, 16));
		dong = new JTextField();
		dong.setColumns(10);
		JButton findBtn = new JButton("주소검색");
		findBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				// 동을 입력하지 않고 검색버튼을 누른 경우
				// 경고창 표시
				if (dong.getText().equals("")) {
					JOptionPane.showMessageDialog(null, "동을 입력하세요!!");
					return;//실행정지시킴
				}
				
				/*String[] addr = new String[] {
					"123-456 서울시 광진구 자양동 789 번지",	
					"987-654 부산시 남구 문현3동 12-0 번지",	
					"456-123 인천시 연수구 선학동 987번지"
				};*/  // 테스트용 코드
				
				// zipcode 테이블에서 동으로 검색한 결과를
				// ArrayList 객체에 담아주면
				// JComboBox  객체에 목록으로 추가할 수 있도록
				// String[] 배열로 다시 작성
				ArrayList<String> zip = ZipcodeDAO.findzip( dong.getText() );
				
				// ArrayList에 담긴 내용을 배열로 옮겨 담음
				String [] addr = new String[zip.size()];
				for( int i = 0; i < zip.size(); ++i ) {
					addr[i] = zip.get(i);
				}
				
				
				// baseAddr = new JComboBox( addr );
				// baseAddr.repaint(); // 불가!
				// 콤보박스에 목록을 변경하려면
				// 기존 목록을 모두 지우고 난 후
				// addItem 메서드로 새로 추가해야 함
				baseAddr.removeAllItems(); // 기존 목록 제거
				for( String l : addr ) 
					baseAddr.addItem(l); // 목록 새로 추가
			}
		}); // findBtn 리스너 end
		
		
		
		etcAddrA = new JTextField();
		etcAddrA.setColumns(10);
		
		JButton sendBtn = new JButton("선택후 닫기");
		sendBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 주소검색 후 적절한 우편번호 및 주소를 선택하고
				// 나머지 주소를 입력한 후 ZipcodeMain의 
				// zip1, zip2, addr, etcAddr에
				// 자동으로 입력하고 현재창 닫음
				String tmp1 = (String) baseAddr.getSelectedItem();
				//String zipA = tmp1.split(" ")[0].split("-")[0];
				// 공백(" ")으로 split해서 zipA[]배열에 담고 첫번째 인 zipA[0](우편번호부분)를 또 "-"로 나눠서 첫번째 배열에 담는데
				//String zipB = tmp1.split(" ")[0].split("-")[1]; // 우편번호 - 뒷부분을 위와 똑같이 해서 2번째 배열에 담는다
				// 위는 우편번호에 -가 없어서 아래 처럼 함
				
				// 123456 : substring(0,3) : 0~2 - 123 (endIndex-1)이라서 3이면 2까지다
				// 123456 : substring(3,6) : 3~5 - 456
				String zipA = tmp1.split(" ")[0].substring(0, 3);
				String zipB = tmp1.split(" ")[0].substring(3, 6);
				String addrA = tmp1.substring(7);
				
				// ZipcodeMain의 zip1, zip2, addr, etcAddr에
				// 사용자가 선택하고 입력한 값 전달
				zip1.setText( zipA );
				zip2.setText( zipB );
				addr.setText( addrA );
				etcAddr.setText( etcAddrA.getText() );
				// 창 닫기
				dispose();			
			}
		});
		
		JButton notBtn = new JButton("검색 취소");
		GroupLayout gl_contentPanel = new GroupLayout(contentPanel);
		gl_contentPanel.setHorizontalGroup(
			gl_contentPanel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPanel.createSequentialGroup()
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPanel.createSequentialGroup()
							.addGap(60)
							.addGroup(gl_contentPanel.createParallelGroup(Alignment.LEADING, false)
								.addGroup(gl_contentPanel.createSequentialGroup()
									.addComponent(txtDong)
									.addGap(18)
									.addComponent(dong, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
									.addGap(28)
									.addComponent(findBtn))
								.addComponent(baseAddr, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
								.addComponent(etcAddrA)))
						.addGroup(gl_contentPanel.createSequentialGroup()
							.addGap(119)
							.addComponent(sendBtn)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(notBtn)))
					.addContainerGap(48, Short.MAX_VALUE))
		);
		gl_contentPanel.setVerticalGroup(
			gl_contentPanel.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPanel.createSequentialGroup()
					.addGap(47)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
						.addComponent(txtDong)
						.addComponent(dong, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(findBtn))
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addComponent(baseAddr, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addComponent(etcAddrA, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addGroup(gl_contentPanel.createParallelGroup(Alignment.BASELINE)
						.addComponent(sendBtn)
						.addComponent(notBtn))
					.addContainerGap(45, Short.MAX_VALUE))
		);
		contentPanel.setLayout(gl_contentPanel);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
	}
}
